Adding 3D content to your appを読む
visionOSのアプリを作成する際は、アプリのインターフェースに奥行きを加える方法を検討してください
システムは、既存のウィンドウ、ボリューム、没入型スペースなど、3Dコンテンツを表示するいくつかの方法を提供
アプリとその提供するコンテンツに最適なオプションを選択せよ
https://gyazo.com/defb75d3c7dfc34749bb4cfa5d349b6c
従来の2Dウィンドウに奥行きを追加する
Window.iconはアプリのインターフェースの重要な部分です。visionOSでは、アプリは自動的にvisionOSのルックアンドフィールを持つマテリアル、目と手の入力用にチューニングされた間隔を持つ完全にリサイズ可能なウィンドウ、カスタムコントロールのハイライト調整へのアクセスを取得します。
必要に応じてカスタムビューに深度効果を組み込み、3Dレイアウトオプションを使用してウィンドウ内のビューを配置します。
この時点ではこう言われても、どう実装するのが良いのか、何をしなければいけないのかがわからない基素.icon
SwiftUIのAPIがいろいろある、ということがわかる
2Dビューにより多くの奥行きを与えることに加えて、2Dウィンドウに静的な3Dモデルを追加することもできます。
たとえば、ショッピングアプリでは、この種のビューを使用して製品の3Dバージョンを表示できます。
Model3Dビューは、USDZファイルまたは他のアセットタイプをロードし、ウィンドウ内の固有のサイズで表示します。 アプリ内にモデルデータがあるか、ネットワークからダウンロードする
RealityKitを使用して動的な3Dシーンを表示する
RealityKitは、画面上で動的に更新される3Dモデルとシーンを構築するためのAppleのテクノロジーです。 visionOSでは、RealityKitとSwiftUIを一緒に使用して、アプリの2Dコンテンツと3Dコンテンツをシームレスに結合します。
既存のUSDZアセットをロードするか、Reality Composer Proでアニメーション、物理学、ライティング、サウンド、カスタムビヘイビアを組み込んだシーンを作成します。
このSwiftUIビューは、RealityKitコンテンツのコンテナとして機能し、馴染みのあるSwiftUIテクニックを使用してそのコンテンツを更新できるようにします。
以下の例は、RealityViewを使用して3D球体を表示するビューを示しています。
ビューのクロージャ内のコードは、球体のRealityKitエンティティを作成し、球体の表面にテクスチャを適用して、球体をビューのコンテンツに追加します。
code:swift
struct SphereView: View {
// Viewプロトコルの要件であるbodyプロパティを定義
var body: some View {
// RealityViewを作成し、その内容を定義するクロージャ
RealityView { content in // contentパラメータは、RealityKitのコンテンツを操作するために使用されます。
// ModelEntityは、RealityKitの基本的なオブジェクトで、3Dシーンに追加できます。
let model = ModelEntity(
mesh: .generateSphere(radius: 0.1),
// 作成したModelEntityインスタンスをRealityViewのコンテンツに追加
content.add(model)
}
}
}
some Viewのsomeは、SwiftのOpaque Result Types(不透明な結果型)を示すキーワードです。 これは、関数やプロパティが特定のプロトコルに適合する何らかの具体的な型を返すことを示します
具体的な型はコンパイラによって推論され、呼び出し元のコードには公開されません
some View : someキーワードを使用することで、bodyは異なる具体的な型を返すことができますが、それらの型は全てViewプロトコルに適合していなければなりません
これにより、ContentViewの利用者はbodyがViewを返すことを知っていれば十分で、実際に返される具体的な型を知る必要がありません。
SwiftUIがRealityViewを表示すると、エンティティやその他のコンテンツを作成するためにコードを一度だけ実行します。
エンティティの状態を更新する場合は、ビューの状態を変更し、更新クロージャを使用してそれらの変更をコンテンツに適用します。
次の例では、更新クロージャを使用して、scaleプロパティの値が変更されたときに球の大きさを変更します。
code:swift
struct SphereView: View {
var scale = false
var body: some View {
RealityView { content in
let model = ModelEntity(
mesh: .generateSphere(radius: 0.1),
content.add(model)
// update closure t
} update: { content in
if let model = content.entities.first {
}
}
}
}
GPT-4o.iconupdate:はRealityKitのコンテキストで使われるクロージャーで、シーンが定期的に更新されるたびに呼び出されるものです。